package com.leetcode.www;

/**
 * Creared with IntelliJ IDEA.
 * Description:给定一个正整数，检查它的二进制表示是否总是 0、1 交替出现：换句话说，就是二进制表示中相邻两位的数字永不相同。
 * User:yxd
 * Date:2022-03-28
 * Time:11:27
 */
public class Everyday693 {
    public boolean hasAlternatingBits(int n) {//位运算 将 aa 与 a + 1a+1 按位与，当且仅当 a 的二进制表示全为 1 时，结果为 0。
        // 这里进行简单证明：当且仅当 a 的二进制表示全为 1 时，a+1 可以进位，并将原最高位置为 0，按位与的结果为 0。
        // 否则，不会产生进位，两个最高位都为 1，相与结果不为 0。

        int a = n ^ (n >> 1);
        return (a & (a + 1)) == 0;
    }

    public boolean hasAlternatingBits1(int n) {
        String s = Integer.toBinaryString(n);
        for(int i= 0;i < s.length() - 1;i ++){
            if(s.charAt(i) == s.charAt(i + 1)){
                return false;
            }
        }
        return true;
    }
}
